package com.weipeep.sys.controller;


import java.util.*;

import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.weipeep.common.base.BaseController;
import com.weipeep.common.mail.EmailService;
import com.weipeep.sys.domain.BaoJiaDO;
import com.weipeep.sys.domain.ProductDO;
import com.weipeep.sys.domain.WebUserDO;
import com.weipeep.sys.service.BaoJiaService;
import com.weipeep.sys.service.WebUserService;
import com.weipeep.sys.vo.XunjiaVo;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.weipeep.sys.domain.XunJiaDO;
import com.weipeep.sys.service.XunJiaService;
import com.weipeep.common.utils.Result;

import javax.annotation.Resource;

/**
 * 
 * <pre>
 * 
 * </pre>
 * <small> 2018-04-21 00:42:43 | wangyun</small>
 */
@Controller
@RequestMapping("/sys/xunJia")
public class XunJiaController extends BaseController{
	@Autowired
	private XunJiaService xunJiaService;
	@Autowired
	private BaoJiaService baoJiaService;
	@Autowired
	private WebUserService webUserService;
	@Resource
	private EmailService emailService;
	@GetMapping()
//	@RequiresPermissions("sys:xunJia:xunJia")
	String XunJia(){
	    return "sys/xunJia/xunJia";
	}
	
	@ResponseBody
	@GetMapping("/list")
//	@RequiresPermissions("sys:xunJia:xunJia")
	public Result<Page<XunjiaVo>> list(Integer pageNumber, Integer pageSize, XunJiaDO xunJiaDTO){
		// 查询列表数据
        Page<XunJiaDO> page = new Page<>(pageNumber, pageSize);
		xunJiaDTO.setUserId(getUserId());
		xunJiaDTO.setXunJiaType(1);
		String model =xunJiaDTO.getModel();
		xunJiaDTO.setModel(null);
		Wrapper<XunJiaDO> wrapper = new EntityWrapper<XunJiaDO>(xunJiaDTO);
		if (model!=null && model.trim().length()>0){
			wrapper.like("model",model);
		}
		wrapper.orderBy("create_time desc");
        page = xunJiaService.selectPage(page, wrapper);
        int total = xunJiaService.selectCount(wrapper);
		List<XunJiaDO> xunJiaDOList = page.getRecords();
		Set<Long> userIds = Sets.newConcurrentHashSet();
		Page<XunjiaVo> pageresult = new Page<>(pageNumber, pageSize);
		xunJiaDOList.forEach(xunJiaDO -> userIds.add(xunJiaDO.getToUserId()));
		if (userIds.size()>0){
			List<XunjiaVo> resultList =Lists.newArrayList();
			List<WebUserDO> webUserDOList = webUserService.selectBatchIds(Lists.newArrayList(userIds));
			Map<Long,WebUserDO> map = Maps.newHashMap();
			for (WebUserDO webUserDO:webUserDOList){
				map.put(webUserDO.getId(),webUserDO);
			}
			for(XunJiaDO xunJiaDO:xunJiaDOList){
				XunjiaVo xunjiaVo = new XunjiaVo();
				if (map.get(xunJiaDO.getToUserId())!=null){
					xunjiaVo.setCompany(map.get(xunJiaDO.getToUserId()).getCompany());
					xunjiaVo.setUserAccount(map.get(xunJiaDO.getToUserId()).getUserAccount());
					xunjiaVo.setMobile(map.get(xunJiaDO.getToUserId()).getMobile());
					xunjiaVo.setQq(map.get(xunJiaDO.getToUserId()).getQq());
					xunjiaVo.setTelephone(map.get(xunJiaDO.getToUserId()).getTelephone());
				}
				xunjiaVo.setModel(xunJiaDO.getModel());
				xunjiaVo.setToUserId(xunJiaDO.getToUserId());
				xunjiaVo.setUserId(xunJiaDO.getUserId());
				xunjiaVo.setXunJiaType(xunJiaDO.getXunJiaType());
				xunjiaVo.setCreateTime(xunJiaDO.getCreateTime());
				xunjiaVo.setNumber(xunJiaDO.getNumber());
				xunjiaVo.setType(xunJiaDO.getType());
				xunjiaVo.setBrand(xunJiaDO.getBrand());
				xunjiaVo.setNote(xunJiaDO.getNote());
				xunjiaVo.setProductId(xunJiaDO.getProductId());
				xunjiaVo.setId(xunJiaDO.getId());
				xunjiaVo.setDemandId(xunJiaDO.getDemandId());
				resultList.add(xunjiaVo);
			}
			pageresult.setRecords(resultList);
		}
		pageresult.setTotal(total);
        return Result.ok(pageresult);
	}

	@ResponseBody
	@GetMapping("/receive/xunjia")
//	@RequiresPermissions("sys:xunJia:xunJia")
	public Result<Page<XunjiaVo>> receiveXunjia(Integer pageNumber, Integer pageSize, XunJiaDO xunJiaDTO){
		// 查询列表数据
		Page<XunJiaDO> page = new Page<>(pageNumber, pageSize);
		xunJiaDTO.setToUserId(getUserId());
		String model =xunJiaDTO.getModel();
		xunJiaDTO.setModel(null);
		Wrapper<XunJiaDO> wrapper = new EntityWrapper<XunJiaDO>(xunJiaDTO);
		if (model!=null && model.trim().length()>0){
			wrapper.like("model",model);
		}
		wrapper.orderBy("create_time desc");
		page = xunJiaService.selectPage(page, wrapper);
		int total = xunJiaService.selectCount(wrapper);
		List<XunJiaDO> xunJiaDOList = page.getRecords();

		Map<String,Object> map1 = Maps.newHashMap();
		map1.put("user_id",getUserId());
		List<BaoJiaDO> baoJiaDOList = baoJiaService.selectByMap(map1);
		Set<Long> alreadBaojia = Sets.newHashSet();
		baoJiaDOList.forEach(baoJiaDO -> alreadBaojia.add(baoJiaDO.getXunJiaId()));

		Set<Long> userIds = Sets.newConcurrentHashSet();
		Page<XunjiaVo> pageresult = new Page<>(pageNumber, pageSize);
		xunJiaDOList.forEach(xunJiaDO -> userIds.add(xunJiaDO.getUserId()));
		if (userIds.size()>0){
			List<XunjiaVo> resultList =Lists.newArrayList();
			List<WebUserDO> webUserDOList = webUserService.selectBatchIds(Lists.newArrayList(userIds));
			Map<Long,WebUserDO> map = Maps.newHashMap();
			for (WebUserDO webUserDO:webUserDOList){
				map.put(webUserDO.getId(),webUserDO);
			}
			for(XunJiaDO xunJiaDO:xunJiaDOList){
				XunjiaVo xunjiaVo = new XunjiaVo();
				if (map.get(xunJiaDO.getUserId())!=null){
					xunjiaVo.setCompany(map.get(xunJiaDO.getUserId()).getCompany());
					xunjiaVo.setUserAccount(map.get(xunJiaDO.getUserId()).getUserAccount());
					xunjiaVo.setMobile(map.get(xunJiaDO.getUserId()).getMobile());
					xunjiaVo.setQq(map.get(xunJiaDO.getUserId()).getQq());
					xunjiaVo.setTelephone(map.get(xunJiaDO.getUserId()).getTelephone());
				}
				xunjiaVo.setModel(xunJiaDO.getModel());
				xunjiaVo.setToUserId(xunJiaDO.getToUserId());
				xunjiaVo.setUserId(xunJiaDO.getUserId());
				xunjiaVo.setXunJiaType(xunJiaDO.getXunJiaType());
				xunjiaVo.setCreateTime(xunJiaDO.getCreateTime());
				xunjiaVo.setNumber(xunJiaDO.getNumber());
				xunjiaVo.setType(xunJiaDO.getType());
				xunjiaVo.setBrand(xunJiaDO.getBrand());
				xunjiaVo.setNote(xunJiaDO.getNote());
				xunjiaVo.setProductId(xunJiaDO.getProductId());
				xunjiaVo.setId(xunJiaDO.getId());
				if (alreadBaojia.contains(xunJiaDO.getId())){
					xunjiaVo.setAlread(true);
				}else {
					xunjiaVo.setAlread(false);
				}
				xunjiaVo.setDemandId(xunJiaDO.getDemandId());
				resultList.add(xunjiaVo);
			}
			pageresult.setRecords(resultList);
		}
		pageresult.setTotal(total);
		return Result.ok(pageresult);
	}

	@GetMapping("/add")
	@RequiresPermissions("sys:xunJia:add")
	String add(){
	    return "sys/xunJia/add";
	}

	@GetMapping("/edit/{id}")
//	@RequiresPermissions("sys:xunJia:edit")
	String edit(@PathVariable("id") Long id,Model model){
		XunJiaDO xunJia = xunJiaService.selectById(id);
		model.addAttribute("xunJia", xunJia);
	    return "sys/baojia/baojiatwo";
	}
	
	/**
	 * 保存
	 */
	@ResponseBody
	@PostMapping("/save")
//	@RequiresPermissions("sys:xunJia:add")
	public Result<String> save( XunJiaDO xunJia){
		if(xunJiaService.insert(xunJia)){
			return Result.ok();
		}
		return Result.fail();
	}
	/**
	 * 保存
	 */
	@ResponseBody
	@PostMapping("/saveXunjia")
//	@RequiresPermissions("sys:xunJia:add")
	public Result<String> saveXunjia(ProductDO productDO){
		XunJiaDO xunJia = new XunJiaDO();
		xunJia.setToUserId(productDO.getUserId());
		xunJia.setUserId(getUserId());
		xunJia.setProductId(productDO.getId());
		xunJia.setCreateTime(Calendar.getInstance().getTime());
		xunJia.setNumber(productDO.getNumber());
		xunJia.setModel(productDO.getModel());
		xunJia.setBrand(productDO.getBrand());
		xunJia.setType(productDO.getType());
		xunJia.setNote(productDO.getNote());
		xunJia.setUnitPrice(productDO.getUnitPrice());
		xunJia.setXunJiaType(1);//对product生成询价
		if(xunJiaService.insert(xunJia)){
			final Long userId = productDO.getUserId();
			final String subject = "收到询价";
			final StringBuilder sb = new StringBuilder();
			WebUserDO webUserDO = webUserService.selectById(getUserId());
			sb.append("<html>");
			sb.append("<body>");
			sb.append("<div>您好,这是由一号轴承网www.01bearing.com接到的询价单，请即登录www.01bearing.com回复处理！祝您成功！</div>");
			sb.append("<div>以下是采购商的询价信息:</div>");
			sb.append("<div>&nbsp;&nbsp;&nbsp;&nbsp;品牌："+(xunJia.getBrand()==null?"":xunJia.getBrand())+"</div>");
			sb.append("<div>&nbsp;&nbsp;&nbsp;&nbsp;类型："+(xunJia.getType()==null?"":xunJia.getType())+"</div>");
			sb.append("<div>&nbsp;&nbsp;&nbsp;&nbsp;型号："+(xunJia.getModel()==null?"":xunJia.getModel())+"</div>");
			sb.append("<div>&nbsp;&nbsp;&nbsp;&nbsp;数量："+(xunJia.getNumber()==null?"":xunJia.getNumber())+"</div>");
			sb.append("<div>&nbsp;&nbsp;&nbsp;&nbsp;接受价格："+(xunJia.getUnitPrice()==null?"":xunJia.getUnitPrice())+"</div>");
			sb.append("<div>&nbsp;&nbsp;&nbsp;&nbsp;备注："+(xunJia.getNote()==null?"":xunJia.getNote())+"</div>");
			sb.append("<div>此询价来自:</div>");
			sb.append("<div>&nbsp;&nbsp;&nbsp;&nbsp;姓名："+(webUserDO.getUserName()==null?"":webUserDO.getUserName())+"</div>");
			sb.append("<div>&nbsp;&nbsp;&nbsp;&nbsp;公司名称："+(webUserDO.getCompany()==null?"":webUserDO.getCompany())+"</div>");
			sb.append("<div>&nbsp;&nbsp;&nbsp;&nbsp;电话："+(webUserDO.getTelephone()==null?"":webUserDO.getTelephone())+"</div>");
			sb.append("<div>&nbsp;&nbsp;&nbsp;&nbsp;传真："+(webUserDO.getFaxs()==null?"":webUserDO.getFaxs())+"</div>");
			sb.append("<div>&nbsp;&nbsp;&nbsp;&nbsp;手机："+(webUserDO.getMobile()==null?"":webUserDO.getMobile())+"</div>");
			sb.append("<div>&nbsp;&nbsp;&nbsp;&nbsp;Email："+(webUserDO.getEmail()==null?"":webUserDO.getEmail())+"</div>");
			sb.append("<div>&nbsp;&nbsp;&nbsp;&nbsp;QQ："+(webUserDO.getQq()==null?"":webUserDO.getQq())+"</div>");
			sb.append("<div>&nbsp;&nbsp;&nbsp;&nbsp;地址："+(webUserDO.getAddress()==null?"":webUserDO.getAddress())+"</div>");
			sb.append("<div>此信由一号轴承网www.01bearing.com专业轴承交易平台实时发送,感谢您选择我们的服务!</div>");
			sb.append("</body>");
			sb.append("</html>");
			new Thread(){
				@Override
				public void run() {
					WebUserDO userDO = webUserService.selectById(userId);
					if (userDO.getEmail()!=null){
						emailService.sendHtmlMail(userDO.getEmail(),subject,sb.toString());
					}
				}
			}.start();
			return Result.ok();
		}
		return Result.fail();
	}
	/**
	 * 修改
	 */
	@ResponseBody
	@RequestMapping("/update")
//	@RequiresPermissions("sys:xunJia:edit")
	public Result<String>  update( XunJiaDO xunJia){
		xunJiaService.updateById(xunJia);
		return Result.ok();
	}
	
	/**
	 * 删除
	 */
	@PostMapping( "/remove")
	@ResponseBody
//	@RequiresPermissions("sys:xunJia:remove")
	public Result<String>  remove( Long id){
		if(xunJiaService.deleteById(id)){
            return Result.ok();
		}
		return Result.fail();
	}
	
	/**
	 * 删除
	 */
	@PostMapping( "/batchRemove")
	@ResponseBody
//	@RequiresPermissions("sys:xunJia:batchRemove")
	public Result<String>  remove(@RequestParam("ids[]") Long[] ids){
		xunJiaService.deleteBatchIds(Arrays.asList(ids));
		return Result.ok();
	}
	
}
